package home;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Random;

import modelo.Usuario;

public class HomePersistencia {
	Connection conn = null;
	PreparedStatement ps = null;
	
	public void anadirUsuario(Usuario u, String codigo)  throws Exception {
		try{
			conn = this.getConnection();
			ps = conn.prepareStatement("INSERT INTO usuarios(nombre_usuario, nombre, apellido, email, fecha_de_nac, contrasena, codigo_validacion) VALUES(?, ?,?,?,?,?,?)");
			ps.setString(1, u.getNombre_usuario());
			ps.setString(2, u.getNombre());
			ps.setString(3, u.getApellido());
			ps.setString(4, u.getEmail());
			ps.setString(5, u.getFechaNac());
			ps.setString(6, u.getContrasena());
			ps.setString(7, codigo);
			ps.execute();
			ps = conn.prepareStatement("INSERT INTO usuariosYValidaciones(nombre_usuario, validado) VALUES(?, false)");
			ps.setString(1, u.getNombre_usuario());
			ps.execute();
			//Assert.assertEquals("Se espera que haya podido insertar 1 registro",1, ps.getUpdateCount());
			ps.close();
		}finally{
			if(ps != null)
				ps.close();
			if(conn != null)
				conn.close();
		}
	}
	
	private Connection getConnection() throws Exception {
		Class.forName("com.mysql.jdbc.Driver");
		return DriverManager.getConnection("jdbc:mysql://localhost/tp_persistencia?user=root&password=root");
	}

	public String traerCodigoValidacion(String usuario) throws Exception {
		conn = this.getConnection();
		ps = conn.prepareStatement("select codigo_validacion from usuarios where nombre_usuario=?");
		ps.setString(1, usuario);
		ResultSet rs = ps.executeQuery();
		rs.next();
		return rs.getString(1);
	}

	public void validarUsuario(String usuario) throws Exception {
		conn = this.getConnection();
		ps = conn.prepareStatement("UPDATE usuariosYValidaciones set validado = true where nombre_usuario =?");
		ps.setString(1, usuario);
		ps.execute();
	}

	public String obtenerContrasenaDe(String nombre_usuario) throws Exception {
		conn = this.getConnection();
		ps = conn.prepareStatement("select contrasena from usuarios where nombre_usuario = ?");
		ps.setString(1, nombre_usuario);
		ResultSet rs = ps.executeQuery();
		rs.next();
		return rs.getString(1);
	}

	public void actualizarContrasenaDe(String nombre_usuario, String contrasenaNueva) throws Exception {
		conn = this.getConnection();
		ps = conn.prepareStatement("update usuarios set contrasena = ? where nombre_usuario = ?");
		ps.setString(1, contrasenaNueva);
		ps.setString(2, nombre_usuario);
		ps.execute();
	}
	
	public static void main(String[] args){
		Random r = new Random(15);
		System.out.println(r.nextLong());
	}
}
